var connection_pool = require("./library/annotation.js");

@.async(function () {
    @lab.init(@options()).pipe(this);
}).then(function () {

    @lab.export.error("./errors");

    @lab.export.service("lab", function (lab) {
        return {
            "inspect": function (session) {
                
                if (session.connection) {
                    @info("inspecting lab settings");
                    @info(session.connection);
                }

                return connection_pool[@mewchan().documentPath].inspect();
            },
            "@ping" : function(){
                @info("PING");
                return @.async.resolve("PONG");
            },
            "ping" : function(session) {
                @info("PING");
                @dump(session);
                return @.async.resolve("PONG");
            },
            "@qos" : function () {
                return @.async.resolve(lab.getRequestQOS());
            },
            "@query" : function ({start , limit, models, conditions = [], params = [], fields = ["*"], sort = "", group = "" }) {
                return lab.query(models,{
                    start , limit, conditions, params, fields,sort, group
                });
            }
        }
    });

    @mew.emit("lab.ready");

}).rejected(function (error) {
    @error(error);
});

/**
 * @api {annot} @lab.export.error([domain],input)=errors @lab.export.error
 * @apiDescription 导出错误表
 * @apiGroup lab
 * @apiParam {Object} [domain=default] 错误命名空间， 可省略
 * @apiParam {Object} input 输入的错误表对象 或者 可输入具体文件夹或文件名(js,json)的路径
 */

/**
 * @api {annot} @lab.export.constant(domain,constant)=constants @lab.export.constant
 * @apiDescription 导出常量
 * @apiGroup lab
 * @apiParam {Object} domain 服务命名空间， 如果包含@，则放置在子命名空间；
 * @apiParam {Object} input 输入的服务对象 或者 可输入具体文件夹或文件名(js,json)的路径
 */

/**
 * @api {annot} @lab.export.service(domain,service)=services @lab.export.service
 * @apiDescription 导出服务
 * @apiGroup lab
 * @apiParam {Object} domain 服务命名空间， 如果包含@，则放置在子命名空间；
 * @apiParam {Object} input 输入的服务对象 或者 可输入具体文件夹或文件名(js,json)的路径
 */

